part of '../authentication.dart';

/// 兑换sms，如果成功的话，会得到一个token
///
/// 需要在body中提供phone和code两项
Handler redeemSms = (Request request) async {
  // 获取请求中的手机号和验证码
  final String phone = request.body.getField<String>("phone", "核销sms必须提供手机号");
  final String code = request.body.getField<String>("code", "核销sms必须提供验证码");

  // 如果是测试用户并且验证码正确，则直接发放token
  if (phone == "10000000000" && code == "0000") {
    final user = await userTable.findOrCreate(phone);
    final token = TokenKit.issue(subject: user.id.toString());
    return responseOK(token);
  }

  // 获取用户信息，并检查验证码
  final user = await userTable.findOrCreate(phone);
  SmsKit.validate(user.sms, code);

  // 当验证通过后，删除验证码以防止二次校验
  user.sms = null;
  userTable.update(user);

  // 通过入口信息中的用户id，签发一个token
  final token = TokenKit.issue(subject: user.id.toString());
  // 将token返回给客户端
  return responseOK(token);
};
